home *** CD-ROM | disk | FTP | other *** search
/ The Programmer Disk / The Programmer Disk (Microforum).iso / xpro / qb2 / pro15 / lines.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-08-20  |  3.4 KB  |  175 lines

  1. {
  2.  ******************************************************************************
  3.  * LINES - Walking lines drawing demo.                          *
  4.  *                                          *
  5.  * Written for GRAFIX by:  Joseph A. Albrecht                      *
  6.  *                                          *
  7.  * Press F10 to toggle between 320 and 640 graphic modes              *
  8.  * Press ESC to exit program                              *
  9.  ******************************************************************************
  10. }
  11.  
  12. PROGRAM WalkingLines;
  13.  
  14. USES
  15.   Crt,
  16.   Grafix;
  17.  
  18. CONST
  19.   Lines = 100;
  20.   MaxColor = 15;
  21.  
  22. VAR
  23.   Graphics, Delta1, Delta2, ChgCnt, MaxX, MaxX1, MaxY, MaxY1: INTEGER;
  24.   ChangeCnt, Tint, IX, Cnt, X1, Y1, X2, Y2, DX1, DY1, DX2, DY2: INTEGER;
  25.   Loop, EndProgram, Tandy11: BOOLEAN;
  26.   LineX1: ARRAY[0..Lines] OF INTEGER;
  27.   LineY1: ARRAY[0..Lines] OF INTEGER;
  28.   LineX2: ARRAY[0..Lines] OF INTEGER;
  29.   LineY2: ARRAY[0..Lines] OF INTEGER;
  30.  
  31.  
  32. FUNCTION Rnd(Max: INTEGER): INTEGER;
  33.  
  34. BEGIN
  35.  
  36.   Rnd := Random(Max) + 1;
  37.  
  38. END;
  39.  
  40.  
  41. PROCEDURE CheckKey;
  42.  
  43. VAR
  44.   Ch: CHAR;
  45.  
  46. BEGIN
  47.  
  48.   Ch := #255;
  49.   IF KeyPressed THEN
  50.     Ch := ReadKey;
  51.   IF Ch = #27 THEN
  52.     BEGIN
  53.       Loop := False;
  54.       EndProgram := True;
  55.     END;
  56.   IF Ch = #00 THEN
  57.     BEGIN
  58.       Ch := ReadKey;
  59.       IF (Ch = #68) AND (Tandy11 = True) THEN
  60.     BEGIN
  61.       IF Graphics = 320 THEN
  62.         BEGIN
  63.           Graphics := 640;
  64.           MaxX := 640;
  65.           MaxX1 := 639;
  66.           Loop := False;
  67.           HighGraphics;
  68.         END
  69.       ELSE
  70.         BEGIN
  71.           Graphics := 320;
  72.           MaxX := 320;
  73.           MaxX1 := 319;
  74.           Loop := False;
  75.           MediumGraphics;
  76.         END;
  77.     END;
  78.     END;
  79.  
  80. END;
  81.  
  82. {Mainline}
  83. BEGIN
  84.  
  85.   Graphics := 320;
  86.   Delta1 := 31;
  87.   Delta2 := 16;
  88.   MaxX := 320;
  89.   MaxX1 := 319;
  90.   MaxY := 200;
  91.   MaxY1 := 199;
  92.   Loop := True;
  93.   EndProgram := False;
  94.   GetTandy11(Tandy11);
  95.   MediumGraphics;
  96.  
  97.   WHILE EndProgram = False DO
  98.     BEGIN
  99.       ClearScreen;
  100.       Randomize;
  101.       Tint := Rnd(MaxColor);
  102.       IX := 0;
  103.       Cnt := 0;
  104.       X1 := Rnd(MaxX) - 1;
  105.       Y1 := Rnd(MaxY) - 1;
  106.       X2 := Rnd(MaxX) - 1;
  107.       Y2 := Rnd(MaxY) - 1;
  108.       DX1 := Rnd(Delta1) - Delta2;
  109.       DY1 := Rnd(Delta1) - Delta2;
  110.       DX2 := Rnd(Delta1) - Delta2;
  111.       DY2 := Rnd(Delta1) - Delta2;
  112.  
  113.       WHILE Loop = True DO
  114.     BEGIN
  115.  
  116.       FOR ChangeCnt := 1 TO Rnd(Lines) DO
  117.         BEGIN
  118.           ExtLineC(X1, Y1, X2, Y2, Tint);
  119.           IX := (IX + 1) Mod Lines;
  120.           IF Cnt = Lines THEN
  121.         ExtLineC(LineX1[IX], LineY1[IX], LineX2[IX], LineY2[IX], Black);
  122.           LineX1[IX] := X1;
  123.           LineY1[IX] := Y1;
  124.           LineX2[IX] := X2;
  125.           LineY2[IX] := Y2;
  126.           IF Cnt < Lines THEN
  127.         Cnt := Cnt + 1;
  128.  
  129.           X1 := X1 + DX1;
  130.           IF (X1 < 0) OR (X1 > MaxX1) THEN
  131.         BEGIN
  132.           DX1 := -DX1;
  133.           X1 := X1 + DX1;
  134.         END;
  135.  
  136.           Y1 := Y1 + DY1;
  137.           IF (Y1 < 0) OR (Y1 > MaxY1) THEN
  138.         BEGIN
  139.           DY1 := -DY1;
  140.           Y1 := Y1 + DY1;
  141.         END;
  142.  
  143.           X2 := X2 + DX2;
  144.           IF (X2 < 0) OR (X2 > MaxX1) THEN
  145.         BEGIN
  146.           DX2 := -DX2;
  147.           X2 := X2 + DX2;
  148.         END;
  149.  
  150.           Y2 := Y2 + DY2;
  151.           IF (Y2 < 0) OR (Y2 > MaxY1) THEN
  152.         BEGIN
  153.           DY2 := -DY2;
  154.           Y2 := Y2 + DY2;
  155.         END;
  156.         END;
  157.  
  158.         DX1 := Rnd(Delta1) - Delta2;
  159.         DY1 := Rnd(Delta1) - Delta2;
  160.         DX2 := Rnd(Delta1) - Delta2;
  161.         DY2 := Rnd(Delta1) - Delta2;
  162.         Tint := Rnd(MaxColor) - 1;
  163.         CheckKey;
  164.  
  165.     END;
  166.  
  167.       IF EndProgram = False THEN
  168.     Loop := True;
  169.  
  170.     END;
  171.  
  172.   ExitGraphics;
  173.  
  174. END.
  175.